#include "hash.hpp"

namespace ns_unordered_map
{
    using namespace link_hash;

    template <class K, class V>
    class unordered_map
    {
    public:
        struct MapOfT
        {
            const K& operator()(const std::pair<K, V>& kv)
            {
                return kv.first;
            }
        };

        typedef typename link_hash::HashTable<K, std::pair<K, V>, MapOfT>::iterator iterator; 

        std::pair<iterator, bool> insert(const std::pair<K, V>& kv)
        {
            return _ht.insert(kv);
        }

        V& operator[](const K& key)
        {
            auto ret = _ht.insert(std::make_pair(key, V()));

            return ret.first->second;
        }

        void Print()
        {
            _ht.Print();
        }
    private:
        HashTable<K, std::pair<K, V>, MapOfT> _ht;
    };

    void Test()
    {
        unordered_map<int, int> map;
        map.insert(std::make_pair(1, 1));
        map.insert(std::make_pair(13, 13));
        map.insert(std::make_pair(11, 11));
        map.Print();       
    }
}